home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / libs / muitoolkit_src.lha / muitoolkit_src / mt_startup.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-18  |  5.6 KB  |  228 lines

  1.  
  2. /*
  3. $Id: mt_startup.c,v 1.6 1999/09/18 11:53:28 carlos Exp $.
  4. */
  5.  
  6. #include "mt_includes.h"
  7. #include <clib/muitoolkit_protos.h>
  8.  
  9.  
  10. /*************************************************************
  11. *************************************************************/
  12.  
  13. extern ULONG SAVEDS STDARGS L_OpenLibs(struct MuiToolkitBase *MuiToolkitBase);
  14. extern void  SAVEDS STDARGS L_CloseLibs(void);
  15.  
  16. struct MuiToolkitBase *SAVEDS ASM InitLib( REG(a6) struct ExecBase *sysbase, REG(a0) struct SegList  *seglist, REG(d0) struct MuiToolkitBase *exb);
  17. struct MuiToolkitBase *SAVEDS ASM OpenLib( REG(a6) struct MuiToolkitBase *MuiToolkitBase);
  18. struct SegList  *SAVEDS ASM CloseLib( REG(a6) struct MuiToolkitBase *MuiToolkitBase);
  19. struct SegList  *SAVEDS ASM ExpungeLib( REG(a6) struct MuiToolkitBase *exb);
  20. ULONG ASM ExtFuncLib(void);
  21.  
  22.  
  23. /*************************************************************
  24. *************************************************************/
  25.  
  26. LONG ASM LibStart(void)
  27. {
  28.  return(-1);
  29. }
  30.  
  31. /*************************************************************
  32. *************************************************************/
  33.  
  34. extern APTR FuncTab [];
  35. extern DataTab;
  36.  
  37. struct InitTable                       /* do not change */
  38. {
  39.  ULONG              LibBaseSize;
  40.  APTR              *FunctionTable;
  41.  struct MyDataInit *DataTable;
  42.  APTR               InitLibTable;
  43. } InitTab =
  44. {
  45.  (ULONG)               sizeof(struct MuiToolkitBase),
  46.  (APTR              *) &FuncTab[0],
  47.  (struct MyDataInit *) &DataTab,
  48.  (APTR)                InitLib
  49. };
  50.  
  51. APTR FuncTab [] =
  52. {
  53.  OpenLib,
  54.  CloseLib,
  55.  ExpungeLib,
  56.  ExtFuncLib,
  57.  
  58.  // v1
  59.  
  60.  mt_Get,
  61.  mt_ParseHotkey,
  62.  mt_Label,
  63.  mt_PopButton,
  64.  mt_Checkmark,
  65.  mt_Cycle,
  66.  mt_CycleWeight,
  67.  mt_Slider,
  68.  mt_SliderFmt,
  69.  mt_String,
  70.  mt_StringSecret,
  71.  mt_StringAccept,
  72.  mt_StringReject,
  73.  mt_Button,
  74.  mt_ButtonWeight,
  75.  mt_ButtonToggle,
  76.  mt_WinOpen,
  77.  mt_WinAttach,
  78.  mt_WinDetach,
  79.  mt_Text,
  80.  mt_GetStringA,
  81.  mt_GetIntegerA,
  82.  mt_Radio,
  83.  mt_Check,
  84.  
  85.  // done
  86.  
  87.  (APTR) ((LONG)-1)
  88. };
  89.  
  90.  
  91. extern struct MuiToolkitBase *MuiToolkitBase;
  92.  
  93. /*************************************************************
  94. *************************************************************/
  95.  
  96. struct MuiToolkitBase * SAVEDS ASM InitLib( REG(a6) struct ExecBase *sysbase,
  97.                                       REG(a0) APTR   seglist,
  98.                                       REG(d0) struct MuiToolkitBase *exb)
  99. {
  100.  MuiToolkitBase = exb;
  101.  
  102.  MuiToolkitBase->mt_SysBase = sysbase;
  103.  MuiToolkitBase->mt_SegList = seglist;
  104.  
  105.  if( L_OpenLibs(MuiToolkitBase) )
  106.     return( MuiToolkitBase );
  107.  
  108.  L_CloseLibs();
  109.  
  110.   {
  111.    ULONG negsize, possize, fullsize;
  112.    UBYTE *negptr = (UBYTE *) MuiToolkitBase;
  113.  
  114.    negsize  = MuiToolkitBase->mt_LibNode.lib_NegSize;
  115.    possize  = MuiToolkitBase->mt_LibNode.lib_PosSize;
  116.    fullsize = negsize + possize;
  117.    negptr  -= negsize;
  118.  
  119.    FreeMem(negptr, fullsize);
  120.  
  121.   }
  122.  
  123.  return(NULL);
  124. }
  125.  
  126. /*************************************************************
  127. *************************************************************/
  128.  
  129. struct MuiToolkitBase * __saveds ASM OpenLib( REG(a6) struct MuiToolkitBase *MuiToolkitBase)
  130. {
  131.  MuiToolkitBase->mt_LibNode.lib_OpenCnt++;
  132.  
  133.  MuiToolkitBase->mt_LibNode.lib_Flags &= ~LIBF_DELEXP;
  134.  
  135.  return(MuiToolkitBase);
  136. }
  137.  
  138. /*************************************************************
  139. *************************************************************/
  140.  
  141. struct SegList *  SAVEDS ASM CloseLib( REG(a6) struct MuiToolkitBase *MuiToolkitBase)
  142. {
  143.  MuiToolkitBase->mt_LibNode.lib_OpenCnt--;
  144.  
  145.  if(!MuiToolkitBase->mt_LibNode.lib_OpenCnt)
  146.   {
  147.    if(MuiToolkitBase->mt_LibNode.lib_Flags & LIBF_DELEXP)
  148.     {
  149.      return( ExpungeLib(MuiToolkitBase) );
  150.     }
  151.   }
  152.  
  153.  return(NULL);
  154. }
  155.  
  156. /*************************************************************
  157. *************************************************************/
  158.  
  159. struct SegList * SAVEDS ASM ExpungeLib( REG(a6) struct MuiToolkitBase *exb)
  160. {
  161.  struct MuiToolkitBase *MuiToolkitBase = exb;
  162.  struct SegList *  seglist;
  163.  
  164.  if(!MuiToolkitBase->mt_LibNode.lib_OpenCnt)
  165.   {
  166.    ULONG negsize, possize, fullsize;
  167.    UBYTE *negptr = (UBYTE *) MuiToolkitBase;
  168.  
  169.    seglist = MuiToolkitBase->mt_SegList;
  170.  
  171.    Remove((struct Node *)MuiToolkitBase);
  172.  
  173.    L_CloseLibs();
  174.  
  175.    negsize  = MuiToolkitBase->mt_LibNode.lib_NegSize;
  176.    possize  = MuiToolkitBase->mt_LibNode.lib_PosSize;
  177.    fullsize = negsize + possize;
  178.    negptr  -= negsize;
  179.  
  180.    FreeMem(negptr, fullsize);
  181.  
  182.    return(seglist);
  183.   }
  184.  
  185.  MuiToolkitBase->mt_LibNode.lib_Flags |= LIBF_DELEXP;
  186.  
  187.  return(NULL);
  188. }
  189.  
  190. /*************************************************************
  191. *************************************************************/
  192.  
  193. ULONG ASM ExtFuncLib(void)
  194. {
  195.  return(NULL);
  196. }
  197.  
  198. struct MuiToolkitBase *MuiToolkitBase = NULL;
  199.  
  200. /*************************************************************
  201. *************************************************************/
  202.  
  203. #ifdef __SASC
  204.  
  205. #ifdef ARK_OLD_STDIO_FIX
  206.  
  207. ULONG XCEXIT       = NULL; /* These symbols may be referenced by    */
  208. ULONG _XCEXIT      = NULL; /* some functions of sc.lib, but should  */
  209. ULONG ONBREAK      = NULL; /* never be used inside a shared library */
  210. ULONG _ONBREAK     = NULL;
  211. ULONG base         = NULL; /* Note, that XCEXIT/ONBREAK actually    */
  212. ULONG _base        = NULL; /* should have been defined as functions */
  213. ULONG ProgramName  = NULL; /* and not as ULONGs...                  */
  214. ULONG _ProgramName = NULL;
  215. ULONG StackPtr     = NULL;
  216. ULONG _StackPtr    = NULL;
  217. ULONG oserr        = NULL;
  218. ULONG _oserr       = NULL;
  219. ULONG OSERR        = NULL;
  220. ULONG _OSERR       = NULL;
  221.  
  222. #endif /* ARK_OLD_STDIO_FIX */
  223.  
  224. void __regargs __chkabort(void) { }  /* a shared library cannot be    */
  225. void __regargs _CXBRK(void)     { }  /* CTRL-C aborted when doing I/O */
  226.  
  227. #endif /* __SASC */
  228.